package com.woniu.repaircenter.service.controller;

import cn.hutool.core.lang.Snowflake;
import com.woniu.exception.XinanException;
import com.woniu.repaircenter.models.dto.RepairFileUploadDTO;
import com.woniu.repaircenter.service.service.RepairFileUploadService;
import com.woniu.utils.JwtUtil;
import com.woniu.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.websocket.server.PathParam;
import java.util.Set;

/**
 * <p>
 * 维修文件上传表 前端控制器
 * </p>
 *
 * @author 吕雨泽
 * @since 2024年12月06日
 */
@RestController
@RequestMapping("/repairFileUpload")
@Api(tags = "维修文件上传表")
public class RepairFileUploadController {

    @Autowired
    private RepairFileUploadService repairFileUploadService;

    /**
     * 上传文件
     * @param file       要上传的文件，类型为MultipartFile，表示通过表单上传的文件
     * @return 返回一个字符串，包含上传成功或失败的信息
     * @throws Exception 如果上传过程中发生错误，将抛出异常
     */
    @PostMapping("/upload")
    @ApiOperation(value = "上传图片", notes = "上传图片")
    public Result upload(
            @RequestParam @ApiParam(name = "file", value = "要上传的文件数组", required = true) MultipartFile file,
            @RequestHeader("token") @ApiParam(name = "token", value = "用户令牌", required = true) String token) throws Exception {
        String userName = JwtUtil.parseToken(token).get("userName").toString();
        Set<RepairFileUploadDTO> imageUrl = repairFileUploadService.uploadImage(file, userName);
        if (imageUrl.isEmpty()) {
            return Result.getResult().setMsg("上传失败").setCode(500);
        } else {
            return Result.getResult(Set.class).setMsg("上传成功").setData(imageUrl).setCode(200);
        }
    }

    /**
     * 删除图片接口
     * 该接口用于根据图片ID删除指定的图片
     *
     * @param id 图片ID，用于指定需要删除的图片，是必传参数
     * @return 返回删除结果，包括删除消息和状态码
     * @throws XinanException 如果删除过程中发生异常，则抛出此异常
     */
    @DeleteMapping("/deleteById")
    @ApiOperation(value = "删除图片", notes = "删除图片")
    public Result delete(@RequestParam @ApiParam(name = "id", value = "图片ID", required = true) Long id)throws XinanException {
        // 调用服务层方法，执行图片删除操作
        repairFileUploadService.deleteImage(id);
        // 构建并返回删除成功的响应结果
        return Result.getResult().setMsg("删除成功").setCode(200);
    }

}
